let utils = {
  REG: {
    /**
     * 正则验证(可扩展)
     * @param  {String} str  需要检测的字符串
     * @param  {String} type 检测类型
     * @return {Boolean}     返回布尔值
     */
    testReg(str, type) {
      switch (type) {
        case 'email':
          return /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(str)
        case 'phone':
          return /^1[3|4|5|7|8][0-9]{9}$/.test(str)
        case 'tel':
          return /^(0\d{2,3}-\d{7,8})(-\d{1,4})?$/.test(str)
        case 'number':
          return /^[0-9]$/.test(str)
        case 'english':
          return /^[a-zA-Z]+$/.test(str)
        case 'chinese':
          return /^[\u4E00-\u9FA5]+$/.test(str)
        case 'lower':
          return /^[a-z]+$/.test(str)
        case 'upper':
          return /^[A-Z]+$/.test(str)
        case 'bank':
          return /^([1-9]{1})(\d{15}|\d{18})$/.test(str)
        default:
          return true
      }
    },
    clearNoNum(obj) {
      obj.value = obj.value.replace(/[^\d.]/g, ""); //清除“数字”和“.”以外的字符   
      obj.value = obj.value.replace(/\.{2,}/g, "."); //只保留第一个. 清除多余的   
      obj.value = obj.value.replace(".", "$#$").replace(/\./g, "").replace("$#$", ".");
      obj.value = obj.value.replace(/^(\-)*(\d+)\.(\d\d\d\d).*$/, '$1$2.$3'); //只能输入4个小数   
      if (obj.value.indexOf(".") < 0 && obj.value != "") { //以上已经过滤，此处控制的是如果没有小数点，首位不能为类似于 01、02的金额  
        obj.value = parseFloat(obj.value);
      }
    }
  },
  DOM: {
    // 函数节流
    debounce(fn, delay) {
      let timer = null
      return function (...args) {
        if (timer) {
          clearTimeout(timer)
        }
        timer = setTimeout(() => {
          fn.apply(this, args)
        }, delay)
      }
    },
    //ios 兼容，input失去焦点后界面上移不恢复的问题
    resetInput () {
      setTimeout(() => {
        let scrollHeight = document.documentElement.scrollTop || document.body.scrollTop || 0;
        window.scrollTo(0, Math.max(scrollHeight - 1, 0));
      }, 100)
    },
    // 浏览器后退不刷新,该场景主要出现在 webview 后退的时候
    loadBrowser () {
      window.onpageshow = (evt) => {
        if (evt.persisted) {
          document.body.style.display = "none";
          location.reload();
        }
      }
    }
  },
  SUBSTR: {
    sunBank(str) {
      return str.substr(0, 6) + '***' + str.substr(-4);
    }
  },
  UNICODE: {
    // unicode 解码
    decodeUnicode(str) {
      return unescape(str.replace(/\\u/gi, '%u'))
    },
    // 转译 unicode
    encodeUnicode(str) {
      let res = [];
      for (let i = 0; i < str.length; i++) {
        res[i] = ("00" + str.charCodeAt(i).toString(16)).slice(-4);
      }
      return "\\u" + res.join("\\u");
    },
  },
}

export default utils